package sui.utils.mongodb;

import java.net.UnknownHostException;
import java.util.List;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.InsertManyOptions;
import com.mongodb.client.model.InsertOneOptions;

/**
 * 
 * <p>
 * Description: MongoDB操作基类
 * <p>
 * @author XQF SUI
 * @Created: 2016年7月8日 下午4:46:20
 * @version 1.0
 */
public class MongoDBUtils {

    /*
     * 所有静态变量在实际生产中可以以放到配置文件或数据库中
     */
    
	/** MongoDB服务地址 */
	private static final String SERVICE_ADRESS = "localhost";
	/** MongoDB服务端口号 */
	private static final Integer SERVICE_PORT = 27017;
	/** MongoDB数据库名称 */
	private static final String DB_NAME = "test";
	
	private static final String DBCOLLECTION_NAME = "test";
	
	/**
	 * <p>
	 * Description：创建MongoDB客户端
	 * </p>
	 * @author XQF SUI
	 * @created 2016年7月8日 下午4:46:30
	 * @return
	 * @throws UnknownHostException
	 */
	public static MongoClient getMongoClient() {
		return new MongoClient(SERVICE_ADRESS, SERVICE_PORT);
	} 
	
	/**
	 * <p>
	 * Description：获取DB
	 * </p>
	 * @author XQF SUI
	 * @created 2016年7月8日 下午4:46:52
	 * @return
	 * @throws UnknownHostException
	 */
    public static MongoDatabase getDatabase() {
		return getMongoClient().getDatabase(DB_NAME);
	}
	
	/**
	 * <p>
	 * Description：获取链接
	 * </p>
	 * @author XQF SUI
	 * @created 2016年7月8日 下午4:47:14
	 * @return
	 * @throws UnknownHostException
	 */
	public static MongoCollection<Document> getCollection() {
		return getDatabase().getCollection(DBCOLLECTION_NAME);
	}
	
	/**
	 * <p>
	 * Description：插入数据
	 * </p>
	 * @author XQF SUI
	 * @created 2016年7月8日 下午4:47:31
	 * @param basicDBObject
	 * @throws UnknownHostException
	 */
	public static void insert(Document document) {
		getCollection().insertOne(document);
	}
	
	public static void insert(Document document, InsertOneOptions oneOptions) {
		getCollection().insertOne(document, oneOptions);
	}
	
	public static void insert(List<? extends Document> documents) {
		getCollection().insertMany(documents);
	}
	
	public static void isnert(List<? extends Document> documents, InsertManyOptions manyOptions) {
		getCollection().insertMany(documents, manyOptions);
	}
}
